<?php namespace system\model;
use hdphp\model\Model;
class Arc extends Model{
		protected $table='article';
	//		如果要使用自动验证就需要配置$validate成员属性参数
//			1.必须有$validate参数
//			2.在store方法中必须有$this->create()才会调用自动验证的规则
		protected $validate = array( 
//			1.自动验证的字段,2.以什么规则来验证,3.错误后的提示消息,4,验证条件,5.验证时机
//			array(字段名,验证方法,错误信息,验证条件,验证时机)
        	array('title','required','文章标题不能为空',3,3)
   		); 
	//		自动完成的配置参数
		protected $auto=array(
		//发表文章的时间
		array('sendtime','time','function',3,1),
		//谁发表文章
		array('user_uid','getUser_uid','method',3,1)
		);
			public function getUser_uid(){
		return $_SESSION['id'];
				
		
			}
//添加到数据库方法
public function store(){
//	1.文章表数据
	if(!$this->create()) return FALSE;
//	验证文章内容表错误消息，如果有错误返回，因为有错误就不需要写入文章表数据了			
//			实例化文章内容表模型，将需要的数据写入数据库
	$ArcData=new \system\model\ArcData;
	if(!$ArcData->create()){
		$this->error=$ArcData->getError();
		return FALSE;
	}
// p($this->data);die;
    $aid=$this->add();
	
//	var_dump($aid);die;
	
	
//	2.标签中间表
$ArcTag=new \system\model\ArcTag;
$tids=$_POST['tid'];
//	foreach($_POST['tid'] as
	foreach($tids as $k=>$v){
		$data=array(
		'article_aid'=>$aid,
		'tag_tid'=>$v
		
		
		);
//		var_dump($data);
		$ArcTag->add($data);
		
		
	}
		//   3.文章内容表	
//   $ArcData=new \system\model\ArcData;
//	 if(!$ArcData->create()){
//	 	return FALSE;
//		 
//	 }  
//文章表的主键压入文章数据表中
	 $ArcData->data['article_aid']=$aid;
	 //
	 $ArcData->add();
	 return true;
	
}
//编辑方法
public function edit(){
	if(!$this->create()) return FALSE;

			$arcDataModel=new \system\model\ArcData;
			if(!$arcDataModel->create()){
//				将arcData模型中的错误取出来，压入当前模型的错误属性中
				$this->error=$arcDataModel->getError();
				return FALSE;
			}

//			如果没有选择标签返回错误信息
			if(!isset($_POST['tid'])){
//				将错误提示消息压入错误属性中去
//				error是父类的成员属性不用自己定义
				$this->error='标签没有选择！';
				return FALSE;
			}
			//修改的数据放进数据库
			$this->save();
	//要知道获取编辑哪一条；为何这要用post接收主键因为ajax模拟了一次post请求路径没有get参数，所以用post去接
	$aid=Q('post.aid',0,'intvial');
	//2修改文章中间表
	// 如果是多对多的中间表，要修改数据
			$arcTagModel=new \system\model\ArcTag;
	//将原数据库中所有文章标签数据删除
	$arcTagModel->where('article_aid',$aid)->delete();
	// 再将新写入的文章标签中间表数据写入数据库
	 foreach(Q('post.tid') as $v){
	 	$data=array('article_aid'=>$aid,
	                 'tag_tid'=>$v);
	                 $this->add($data);
	 	//修改文章内容表
	 	// 3.修改文章内容表
			$arcDataModel->data['article_aid']=$aid;
				// update方法不会自动获取$this->data这个成员属性
			$articledata=array(
				'keywords'=>htmlspecialchars($_POST['keywords']),
				//实例文本域防止写js
				'des'=>htmlspecialchars($_POST['des']),
				'content'=>htmlspecialchars($_POST['content'])
				);
			$arcDataModel->where('article_aid',$aid)->update($articledata);

			// 一定要return
			return true;

	 	
	 }
	
}
// 获取数据库数据，处理了，分页，不在回收站，或在回收站，获取对应的数据
		// $is_recycle//就是在不在回收站，0,不在回收站，1在回收站
		public function getAll($is_recycle){
//		join//关联
//		1.要关联的表名，2。需要关联表的第一个表的关联字段,3.'='(固定语法)4.关联的第二个表的字段
//		$data=$this->db->join('category','category_cid','=','cid')->get();
//		获取当前文章的总数量
		$total=$this->join('category','category_cid','=','cid')->where('is_recycle',$is_recycle)->count();
//		分页
//		row(一页多少文章)，make（生成分页，所有文章的总数）
//		调用分页类后返回的结果是一个模板
		$page=Page::row(2)->make($total);
//		var_dump($page);die;
//		echo Page::limit();die; 0,2  3,2
//		根据分页类获取到的limit条件获取数据
//$this指向当前这个类和这个对象一个模型类操作一个表，所有这个$this代表这个文章表
		$data=$this->join('category','category_cid','=','cid')->where('is_recycle',$is_recycle)->orderBy('sendtime','DESC')->limit(Page::limit())->get();
		// return $data;
		// return $page;
		// 将分页数据和查询的文章结果数据都赋值到一个变量中返回
		return $data=array('page'=>$page,'data'=>$data);
		}	



		// 彻底删除方法
		public function realdel(){
			$aid=Q('post.aid',0,'intval');
			// 删除文章表
			$this->where('aid',$aid)->delete();
			// 删除文章标签中间表
			Db::table('article_tag')->where('article_aid',$aid)->delete();
			// 删除文章内容数据表
			Db::table('article_data')->where('article_aid',$aid)->delete();
			return true;
		}

		








}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	?>